package com.skivingcloud.admin.sys.service.impl;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.skivingcloud.admin.sys.entity.SysLog;
import com.skivingcloud.admin.sys.entity.SysUser;
import com.skivingcloud.admin.sys.mapper.SysLogMapper;
import com.skivingcloud.admin.sys.service.SysLogService;
import com.skivingcloud.common.utils.PageParameter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Map;

/**
 *  服务层实现。
 *
 * @author skivingcloud
 * @since 2023-08-28
 */
@Service
public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> implements SysLogService {
    
    /**
     * 日志分页查询
     *
     * @param parameter 参数
     * @return 查询结果
     */
    @Override
    public Page<SysLog> queryByPage(PageParameter<Map<String, Object>> parameter){
        Page<SysLog> page = new Page<>(parameter.getPage(), parameter.getPageSize());
        Map<String, Object> param = parameter.getParam();
        QueryWrapper queryWrapper = QueryWrapper.create().from(SysLog.class)
                .as("slog").leftJoin(SysUser.class).as("usr").on(
                        wrapper -> wrapper.where(SysLog::getUserId).eq(SysUser::getId)
                );
//        Map<String, Object> queryParam = new HashMap<>();
        if(param.containsKey("staff_name") && StringUtils.isNotBlank(param.get("staff_name") == null ? null : param.get("staff_name").toString())){
//            queryParam.put("staff_name", "%" + param.get("staff_name").toString() + "%");
            queryWrapper.and(SysUser::getStaffName).like(param.get("staff_name").toString());
        }
        if(param.containsKey("username") && StringUtils.isNotBlank(param.get("username") == null ? null : param.get("username").toString())){
//            queryParam.put("username", "%" + param.get("username").toString() + "%");
            queryWrapper.and(SysUser::getUsername).like(param.get("username").toString());
        }
        if(param.containsKey("oper_time_start") && StringUtils.isNotBlank(param.get("oper_time_start") == null ? null : param.get("oper_time_start").toString())){
//            queryParam.put("oper_time_start", param.get("oper_time_start").toString());
            queryWrapper.and(SysLog::getOperTime).ge(LocalDate.parse(param.get("oper_time_start").toString(), DateTimeFormatter.ISO_DATE).atStartOfDay());
        }
        if(param.containsKey("oper_time_end") && StringUtils.isNotBlank(param.get("oper_time_end") == null ? null : param.get("oper_time_end").toString())){
//            queryParam.put("oper_time_end", param.get("oper_time_end").toString());
            queryWrapper.and(SysLog::getOperTime).le(LocalDate.parse(param.get("oper_time_end").toString(), DateTimeFormatter.ISO_DATE).atStartOfDay().plusDays(1));
        }
//        queryParam.put("start", (page.getPageNumber() -1) * page.getPageSize());
//        queryParam.put("pageSize", page.getPageSize());
        return this.page(page, queryWrapper);
//        List<Map<String, Object>> list = this.mapper.queryByPage(queryParam);
//        Long totalRow = this.mapper.queryByPageCount(queryParam);
//        page.setRecords(list);
//        page.setTotalRow(totalRow);
//        return page;
    }
}
